﻿using System;
using System.Collections.Generic;
using BusinessBingo.Data.DataLoadOptions;
using BusinessBingo.Data.DataOrderOptions;
using BusinessBingo.Data.Filter;
using BusinessBingo.Model;

namespace BusinessBingo.Data.Interfaces
{
    /// <summary>
    /// Interface for BingoSetRepository
    /// </summary>
    public interface IBingoSetRepository
    {
        /// <summary>
        /// Adds a new BingoSetItem to the repository
        /// </summary>
        /// <param name="item">New BingoSetItem for the repository</param>
        void AddItem(Model.BingoSet item);

        /// <summary>
        /// Checks the word for a specific user
        /// </summary>
        /// <param name="userId">UserId as filter</param>
        /// <param name="wordId">WordId as filter</param>
        void CheckWord(Guid userId, Guid gameId, Guid wordId);

        /// <summary>
        /// Returns a List of BingoSet Items based on the given options and filters
        /// </summary>
        /// <param name="dlo">Dataload Options</param>
        /// <param name="doo">DataOrder Options</param>
        /// <param name="filter">Filter for filtering</param>
        /// <returns>Result as BingoSet List</returns>
        IList<Model.BingoSet> GetItems(BingoSetDataLoadOptions dlo, BingoSetDataOrderOptions doo, BingoSetFilter filter);

        /// <summary>
        /// Count based on filters
        /// </summary>
        /// <param name="filter">Filter criteria</param>
        /// <returns>Count for BingoSet</returns>
        int GetItemsCount(BingoSetFilter filter);
    }
}
